package cn.play.cardgame.util;

import android.content.Context;
import android.content.res.Resources;
import android.util.DisplayMetrics;
import android.view.WindowManager;

/**
 * Screen size（屏幕尺寸) 指的是手机实际的物理尺寸，比如常用的2.8英寸，3.2英寸，3.5英寸，3.7英寸
 * 摩托罗拉milestone手机是3.7英寸
 * 
 * Aspect Ratio(宽高比率) 指的是实际的物理尺寸宽高比率,分为long和nolong Milestone是16：9,属于long
 * 
 * Resolution(分辨率) 和电脑的分辨率概念一样，指手机屏幕纵、横方向像素个数 Milestone是854*480
 * 
 * DPI(dot per inch)
 * 每英寸像素数，如120dpi,160dpi等,假设QVGA(320*240)分辨率的屏幕物理尺寸是（2英寸*1.5英寸），dpi=160
 * 可以反映屏幕的清晰度，用于缩放UI的
 * 
 * Density(密度) 屏幕里像素值浓度，resolution/Screen size可以反映出手机密度,
 * 
 * Density-independent pixel (dip)
 * 指的是逻辑密度计算单位,dip和具体像素值的对应公式是dip/pixel=dpi值/160,也就是px = dp * (dpi / 160)
 */
public class ScreenUtils {

	public static Resources getResources(Context context) {
		if (context == null) {
			return Resources.getSystem();
		} else {
			return context.getResources();
		}
	}

	public static int dp2px(float dpValue) {
		return dp2px(null, dpValue);
	}

	public static int dp2px(Context context, float dpValue) {
		Resources r = getResources(context);
		float scale = r.getDisplayMetrics().densityDpi;
		return (int) (dpValue * (scale / 160) + 0.5f);
	}

	public static float px2dp(float pxValue) {
		return px2dp(null, pxValue);
	}

	public static float px2dp(Context context, float pxValue) {
		Resources r = getResources(context);
		float scale = r.getDisplayMetrics().densityDpi;
		return (pxValue * 160) / scale;
	}

	public static int sp2px(float spValue) {
		return sp2px(null, spValue);
	}

	public static int sp2px(Context context, float spValue) {
		Resources r = getResources(context);
		float scale = r.getDisplayMetrics().scaledDensity;
		return (int) (spValue * scale + 0.5f);
	}

	public static float px2sp(float pxValue) {
		return px2sp(null, pxValue);
	}

	public static float px2sp(Context context, float pxValue) {
		Resources r = getResources(context);
		float scale = r.getDisplayMetrics().scaledDensity;
		return pxValue / scale;
	}

	public static int getScreenWidth(Context context) {
		WindowManager wm = (WindowManager) context
				.getSystemService(Context.WINDOW_SERVICE);
		DisplayMetrics outMetrics = new DisplayMetrics();
		wm.getDefaultDisplay().getMetrics(outMetrics);
		return outMetrics.widthPixels;
	}

	public static int getScreenHeight(Context context) {
		WindowManager wm = (WindowManager) context
				.getSystemService(Context.WINDOW_SERVICE);
		DisplayMetrics outMetrics = new DisplayMetrics();
		wm.getDefaultDisplay().getMetrics(outMetrics);
		return outMetrics.heightPixels;
	}
}